package com.shuwen.gcdj.mapper.mysql;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shuwen.gcdj.bean.member.request.UserDomainControlListReq;
import com.shuwen.gcdj.bean.member.request.UserListNoPage;
import com.shuwen.gcdj.bean.member.request.UserListReq;
import com.shuwen.gcdj.bean.member.response.UserDetailResp;
import com.shuwen.gcdj.bean.member.response.UserDomainControlDataLevelItem;
import com.shuwen.gcdj.bean.member.response.UserDomainControlListItemResp;
import com.shuwen.gcdj.bean.member.response.UserListItemResp;
import com.shuwen.gcdj.bean.member.response.UserListWithoutAuthItemResp;
import com.shuwen.gcdj.bean.power.response.PowerItemResp;
import com.shuwen.gcdj.bean.role.response.RoleItemResp;
import com.shuwen.gcdj.entity.Account;
import com.shuwen.gcdj.entity.RolePower;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 登录账户(t_user_account)数据Mapper
 *
 * @author localhost_ubuntu
 * @description created by mybaits plus code generator
 * @since 2021-11-24 21:56:05
 */
@Mapper
public interface AccountMapper extends BaseMapper<Account> {
    /**
     * 根据用户id获取用户的角色列表
     *
     * @param userId   String
     * @param isSupper Integer
     * @return List<Role>
     */
    List<RoleItemResp> getRolesByUserId(@Param("userId") String userId, @Param("isSupper") Integer isSupper, @Param("bizHiddenRoleCodes") List<String> bizHiddenRoleCodes);

    /**
     * 根据用户id获取用户的权限列表
     *
     * @param userId   String
     * @param isSupper Integer
     * @return List<PowerItemResp>
     */
    List<PowerItemResp> getPowersByUserId(@Param("userId") String userId, @Param("isSupper") Integer isSupper);

    /**
     * 根据角色获取权限
     *
     * @param roleIds List<String>
     * @return List<PowerItemResp>
     */
    List<PowerItemResp> getPowersByRoleIds(@Param("roleIds") List<String> roleIds);

    /**
     * 根据权限码获取权限
     *
     * @param powerCodes List<String>
     * @return List<PowerItemResp>
     */
    List<PowerItemResp> getPowersByPowerCodes(@Param("powerCodes") List<String> powerCodes);

    /**
     * 获取管理员角色
     *
     * @param userId   String 必传
     * @param roleCode String 角色code
     * @return List<RoleItemResp>
     */
    List<RoleItemResp> getRoles(@Param("userId") String userId, @Param("roleCode") String roleCode);

    /**
     * 获取用户列表
     *
     * @param bean UserListReq
     * @return List<UserListItemResp>
     */
    IPage<UserListItemResp> getListPage(Page<UserListItemResp> page, @Param("bean") UserListReq bean, @Param("isSuper") Integer isSuper);


    /**
     * 获取用户列表
     *
     * @param bean UserListReq
     * @return List<UserListItemResp>
     */
    List<UserListItemResp> getList(@Param("bean") UserListNoPage bean, @Param("isSuper") Integer isSuper);
    /**
     * 获取用户基本信息列表(不做域控范围限制)
     *
     * @param bean UserListReq
     * @return List<UserListItemResp>
     */
    IPage<UserListWithoutAuthItemResp> getUserBaseInfoList(Page<UserListWithoutAuthItemResp> page, @Param("bean") UserListReq bean, @Param("isSuper") Integer isSuper);

    /**
     * 批量获取用户详情
     *
     * @param userId List<String>
     * @return List<UserDetailResp>
     */
    List<UserDetailResp> getMultiUserDetail(@Param("userId") List<String> userId);

    /**
     * 获取域控角色权限
     *
     * @param bean UserDomainControlReq
     * @return List<RolePower>
     */
    List<RolePower> getDomainControl(@Param("bean") UserDomainControlListReq bean);

    /**
     * ids获取
     * @return List<RolePower>
     */
    List<UserListItemResp> getPowersByUserIds(@Param("ids")List<String> ids);


    /**
     * 获取域控制列表
     *
     * @param bean List<String>
     * @return List<UserDomainControlListItemResp>
     */
    List<UserDomainControlListItemResp> getDomainControlUserList(@Param("bean") UserDomainControlListReq bean, @Param("domain") UserDomainControlDataLevelItem domain, @Param("isSuper") Integer isSuper);

    int updateLoginTimes(@Param("id") String id);
}
